#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>

int main(int argc, char* argv[]){

    FILE* fp[3];
    char buf[256];
    size_t bytes_read;
    size_t size;
    size_t offset;
    uint32_t count;
    char* pbuf = NULL;

    if(argc < 2){   // 需要两个参数
        printf("input parameter is less than 2\r\n");
        return -1;
    }

    fp[1] = fopen(argv[1], "rb");   // 二进制形式读取
    fp[2] = fopen(argv[2], "wb");   // 二进制形式写入

    if(fp[1] == NULL || fp[2] == NULL){
        printf("file open error\r\n");
        return -1;
    }

    while((bytes_read = fread(buf, 1, sizeof(buf), fp[1])) > 0){    // fread函数二进制形式读取，每次读取一字节，一共读取256字节

        /*模拟can通信传输：一次传输8字节*/
        size = bytes_read;
        offset = size % 8;
        count = size / 8 + (offset > 0 ? 1 : 0);
        pbuf = buf;

        for(int i = 0; i < count; i ++){

            if(size - i * 8 >= 8){  // 发送大于
                fwrite(pbuf, 1, 8, fp[2]);   // 和can通信一样一次传输8字节
            }else{
                fwrite(pbuf, 1, size - i * 8, fp[2]);
            }
            pbuf += 8;

        }

    }

    printf("cp %s to %s end\r\n", argv[1], argv[2]);
    return 0;
}